import path from 'node:path'

import { defineConfig, loadEnv } from 'vite'
import { useProxy } from './scripts/build/proxy'
import { wrapperEnv } from './scripts/build/utils'
import useVitePlugins from './scripts/build/plugins'

export default defineConfig(async ({ command, mode }) => {
  const projectFileRoot = process.cwd()
  const { UNI_PLATFORM } = process.env
  const autoTypesRoot = path.resolve(projectFileRoot, 'src/types/auto')
  const isBuild = process.env.NODE_ENV === 'production'
  console.log(`command = ${command}, mode = ${mode}`)
  // pnpm dev:h5 时得到 => serve development
  // pnpm build:h5 时得到 => build production
  // pnpm dev:mp-weixin 时得到 => build development (注意区别，command为build)
  // pnpm build:mp-weixin 时得到 => build production

  // process.cwd(): 获取当前文件的目录跟地址
  // loadEnv(): 返回当前环境env文件中额外定义的变量
  const envRoot = path.resolve(process.cwd(), 'env')
  const env = loadEnv(mode, envRoot)
  const viteEnv = wrapperEnv(env)
  // console.log('UNI_PLATFORM -> ', UNI_PLATFORM) // 得到 mp-weixin, h5, app 等
  const isH5Dev = UNI_PLATFORM === 'h5' && process.env.NODE_ENV === 'development'

  const {
    VITE_APP_PORT,
    VITE_SERVER_BASEURL,
    VITE_SHOW_SOURCEMAP,
    VITE_DELETE_CONSOLE,
    VITE_TOKEN_PREFIX,
    VITE_USE_PROXY,
    VITE_PROXY_LIST,
  } = viteEnv
  console.log('环境变量 env -> ', viteEnv)
  return {
    envDir: './env', // 自定义env目录
    plugins: useVitePlugins(isBuild, UNI_PLATFORM, env),
    resolve: {
      alias: {
        '@': path.join(process.cwd(), './src'),
        '@static': path.join(process.cwd(), './src/static'),
      },
    },
    define: {
      __UNI_PLATFORM__: JSON.stringify(UNI_PLATFORM),
      __VITE_APP_PROXY__: JSON.stringify(VITE_USE_PROXY),
      __VITE_TOKEN_PREFIX__: JSON.stringify(VITE_TOKEN_PREFIX),
      __VITE_IS_DEV__: JSON.stringify(mode === 'development'),
    },
    css: {
      postcss: {
        plugins: [
          // autoprefixer({
          //   // 指定目标浏览器
          //   overrideBrowserslist: ['> 1%', 'last 2 versions'],
          // }),
        ],
      },
    },
    optimizeDeps: {
      include: ['@ant-design/colors'],
      // 防止在 dev 阶段就会出现页面使用预构建产物中的国际化数据，而组件库使用组件库内部的国际化数据
      exclude: isH5Dev ? ['wot-design-uni'] : [],
    },
    build: {
      // 方便非h5端调试
      sourcemap: VITE_SHOW_SOURCEMAP === 'true', // 默认是false
      // target: 'es2015',
      // 开发环境不用压缩
      // minify: mode === 'development' ? false : 'terser',
      terserOptions: {
        compress: {
          drop_console: VITE_DELETE_CONSOLE === 'true',
          drop_debugger: VITE_DELETE_CONSOLE === 'true',
        },
      },
      // 解决windows系统对微信小程序自动关闭服务的问题 /* process.platform === 'win32' 检测是否为 windows 系统 */
      watch: process.platform === 'win32' ? { exclude: ['node_modules/**', '/__uno.css'] } : null,
    },
    server: {
      host: '0.0.0.0',
      hmr: true,
      port: VITE_APP_PORT,
      warmup: {
        // 请注意，只应该预热频繁使用的文件，以免在启动时过载 Vite 开发服务器
        // 可以通过运行 npx vite --debug transform 并检查日志来找到频繁使用的文件
        clientFiles: ['./index.html', './src/{components,api}/*'],
      },
      // 仅 H5 端生效，其他端不生效（其他端走build，不走devServer)
      proxy: VITE_USE_PROXY ? useProxy(VITE_PROXY_LIST) : undefined,
    },
  }
})
